package class_08;
/**
 *      奶牛 
 *     问题： 母牛每年生一只母牛，新出生的母牛成长三年后也能每年生一只母牛，假设不会死。
 *	 求N年后，母牛的数量。
 *
 * @author LOGAN
 *
 */
public class Code_05_Cow {

	/**
	 * 	递归  
	 *   当牛的数量为：1,2,3的时候，都为n个牛
	 *   当牛的数量大于4的时候，1天之前的牛，加上3天之前的牛
	 * @param n
	 * @return
	 */
	public static int cowNumber1(int n) {
		if (n < 1) {
			return 0;
		}
		if (n == 1 || n == 2 || n == 3) {
			return n;
		}
		return cowNumber1(n - 1) + cowNumber1(n - 3);
	}
	/**
	 * 暴力解法
	 * 
	 * @param n
	 * @return
	 */
	public static int cowNumber2(int n) {
		if (n < 1) {
			return 0;
		}
		if (n == 1 || n == 2 || n == 3) {
			return n;
		}
		//结果
		int res = 3;
		//去年
		int pre = 2;
		//前年
		int prepre = 1;
		int tmp1 = 0;
		int tmp2 = 0;
		for (int i = 4; i <= n; i++) {
			tmp1 = res;
			tmp2 = pre;
			//结果= 去年  +前年的
			res = res + prepre;
			pre = tmp1;
			prepre = tmp2;
		}
		return res;
	}

	public static void main(String[] args) {
		int n = 20;
		System.out.println(cowNumber1(n));
		System.out.println(cowNumber2(n));
	}

}
